<?php

require_once 'Banca.php';
require_once 'Aluno.php';
require_once '../model/dao/DBDefesa.php';
require_once 'Professor.php';

/**
 * Classe responsável por tratar o estado e o comportamento de objetos de tipo Defesa.
 *
 * @author gabrielbmoro
 */
class Defesa {

    private $banca;
    private $horario;
    private $numSala;
    private $data;
    private $aluno;
    private $dbDefesa;

    /* Método responsável por inicializar os dados referentes a defesa, como: nome dos professores, horário, data, número de sala e o aluno. */

    public function __construct($professor1, $professor2, $professor3, $horario, $data, $numSala, $aluno) {
        $this->banca = new Banca($professor1, $professor2, $professor3);
        $this->horario = $horario;
        $this->data = $data;
        $this->numSala = $numSala;
        $this->aluno = new Aluno(null, null, null, $aluno);
        $this->dbDefesa = new DBDefesa();
    }

    /* Método responsável por cadastrar os dados referentes a defesa. */

    public function cadastrarDados() {
        $professoresNames = (array) $this->banca->getListNameProfessors();

        $dado = array(0 => $professoresNames, 1 => $this->horario, 2 => $this->data, 3 => $this->numSala, 4 => $this->aluno->getNome());
        return $this->dbDefesa->inserir($dado);
    }

    /* Método responsável por atualizar os dados de acordo com o idTcc. */

    public function atualizarDados($idTcc) {
        $arrayCampos = array(0 => $this->numSala, 1 => $this->data, 2 => $this->horario, 3 => $idTcc);
        return $this->dbDefesa->editar("`numeroSala`,`data`,`horario`", $arrayCampos);
    }

    /* Método responsável por recuperar os dados referentes a defesa. */

    public function getDados() {
        $arrayResult = $this->dbDefesa->recuperar($this->aluno->getNome());
        if ($arrayResult != null) {
            return $arrayResult;
        } else
            return null;
    }

    /* Método responsável por alterar o horário. */

    public function setHorario($horario) {
        $this->horario = $horario;
    }

    /* Método responsável por alterar o número da sala. */

    public function setNumSala($numSala) {
        $this->numSala = $numSala;
    }

    /* Método responsável por alterar a data. */

    public function setData($data) {
        $this->data = $data;
    }

}
